package org.litu.app.controller.system;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.litu.app.constant.SysContant;
import org.litu.app.entity.system.SysConfigs;
import org.litu.app.service.ISysConfigsService;
import org.litu.base.controller.BaseFormController;
import org.litu.base.log.LtLog;
import org.litu.core.base.ApiRes;
import org.litu.core.enums.ResultEnum;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * 系统配置管理控制器
 *
 * @author Administrator
 */
@LtLog(module = "系统配置")
@RequestMapping(value = "/system/sysConfigs")
@RestController
@Api(value = "系统配置表", tags = {"系统配置表"}, protocols = "http,https")
public class SysConfigsController extends BaseFormController<SysConfigs, ISysConfigsService> {

    /**
     * 添加、修改时，进行传入数据字段的校验
     *
     * @param entity 对象实体
     * @param params 其他参数
     */
    @Override
    protected void validate(SysConfigs entity, Map<String, String> params) {
        super.validate(entity, params);
        // 前台传过来的json中的引号会被转移，这里进行处理。
        // TODO 找下是否还有其他解决方式，有的框架就不会出现此问题。
        if (SysContant.CONFIG_TYPE_JSON.equals(entity.getValueType())) {
            String newValue = StringEscapeUtils.unescapeHtml4(entity.getValue());
            entity.setValue(newValue);
        }
    }

    /**
     * getConfigValue
     *
     * @param code 配置code
     * @return 配置的值
     */
    @GetMapping("/getConfigValue")
    @ApiOperation(value = "获取配置值", notes = "根据配置code信息获取配置值")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "code", value = "获取配置的code信息", required = true)
    })
    public ApiRes getConfigValue(@RequestParam(required = true) String code) {
        if (StringUtils.isBlank(code)) {
            return ApiRes.error(ResultEnum.ParamError);
        }

        String value = service.getConfigValue(code);
        return ApiRes.ok(value);
    }
}
